import random
import string

from FlowControl.Template import *


def generate_random_number(length: int = 3) -> string:
    """
    生成随机长度数字，允许首字符为0
    @param length:
    @return:
    """
    return ''.join(random.choices(string.digits, k=length))


def format_time(str_time: str) -> string:
    """
    202208140027
    @param str_time:
    @return:
    """


def format_flight_identification(id: str, flight: str, REGISTENUM: str, SOBT: str, EOBT: str, DEPAP: str, ARRAP: str):
    """
    构造 FLIGHT_IDENTIFICATION
    @param id: 010
    @param flight: 航班号，ICAO 格式 取自 CDM 系统 TST0001
    @param REGISTENUM: 航班注册号 取自 CDM 系统 028
    @param SOBT: 12 位日期格式计划撤轮档时间 取自 CDM 系统 202208140027
    @param EOBT: 12 位日期格式 预计撤轮档时间 取自 CDM 系统 202208140027
    @param DEPAP: 起飞机场，ICAO 取自 CDM 系统  格式 ZUCK
    @param ARRAP: 降落机场，ICAO 格式 取自 CDM 系统 ZZZZ
    @return:
    """
    return FLIGHT_IDENTIFICATION.format(ID=id, flight=flight, REGISTENUM=REGISTENUM, SOBT=SOBT, EOBT=EOBT, DEPAP=DEPAP,
                                        ARRAP=ARRAP)


def format_ntfm_flight(RESFLAG: int, TMITYPE: str, FTMICONTENT: str, APPROACHING_TMICONTENT: str, WPFLAG: bool,
                       WPEXPLAIN: str, CTOT_INFO: str, ):
    """
    构造 NTFM_FLIGHT
    @param RESFLAG:
    @param TMITYPE:
    @param FTMICONTENT:
    @param APPROACHING_TMICONTENT:
    @param WPFLAG:
    @param WPEXPLAIN:
    @param CTOT_INFO:
    @return:
    """
    return NTFM_FLIGHT.format(
        RESFLAG=RESFLAG,
        TMITYPE=TMITYPE,
        FTMICONTENT=FTMICONTENT,
        APPROACHING_TMICONTENT=APPROACHING_TMICONTENT,
        WPFLAG=WPFLAG,
        WPEXPLAIN=WPEXPLAIN,
        CTOT_INFO=CTOT_INFO
    )


def format_item(flight_identification: str, ntfm_flight: str, PRIORITY: int, AOBT: str, TOBT: str, COBT: str, CTOT: str,
                CTOT_SOURCE: str, COBT_TYPE: str, CTOT_COMPLIANT: str, ASBT: str, AGCT: str, POSITION: str,
                CONTRL_STATUS: str, HOBT: str, HIT_FLOWCONTROLS: list, HIT_FLOWCONTROLS_HIS: list, EXECUTEDATE: str):
    """

    @param flight_identification:
    @param ntfm_flight:
    @param PRIORITY:  航班优先级 0：正常  10：航空公司协调  30：国内转国际 40：国际  48：豁免 50：要客
    @param AOBT: 实际推出/撤轮档时间 
    @param TOBT: 目标撤轮档时间 
    @param COBT: 计算撤轮档时间 
    @param CTOT: 计算起飞时间
    @param CTOT_SOURCE:  CTOT 来源 CDM：CDM 系统分配  CRS：CRS 系统分配 NTFM：NTFM 系统分配
    @param COBT_TYPE:  用 于 标 识 当 前COBT/CTOT 时隙类型
                        0：系统未分配时隙
                        100：系统分配时隙，未锁定
                        200：系统分配时隙，已锁定
                        300：人工指定时隙/时隙来源 NTFM 系统
                        400：人工指定时隙，并禁止系统修改
                        500：航班已进入等待池
                        600：航班被人工退出时隙分配
                        700：航班已取消或航班被人工标记为取消
    @param CTOT_COMPLIANT:  用 于 标 识 当 前 COBT/CTOT 时间的遵循程度
                        0：默认值，无要求；
                        100：要求严格遵循，并按照 CTOT 放行；
    @param ASBT: 实际上客时间 
    @param AGCT: 实际关舱门时间
    @param POSITION:  使用停机位
    @param CONTRL_STATUS: 受控状态 0：默认值，非受控；  100：受控；
    @param HOBT:  协调撤轮档时间
    @param HIT_FLOWCONTROLS:  航班正在生效的流控，使用英文逗号分隔多个 命 中 流控 的唯 一标识0000ID；
                                例如：
                                {14568},{2689},{34589},
                                …, {69854}
    @param HIT_FLOWCONTROLS_HIS: 航班已终止的流控，使用英文逗号分隔多个命 中 流控 的唯 一标识ID；
                                例如：
                                {14568},{2689},{34589},
                                …, {69854}
    @param EXECUTEDATE:  执行日期
    @return:
    """
    print("def")
    print(
        {}
    )
    __item = ITEM.format(
        flight_identification=flight_identification,
        ntfm_flight=ntfm_flight,
        PRIORITY=PRIORITY,
        AOBT=AOBT,
        TOBT=TOBT,
        COBT=COBT,
        CTOT=CTOT,
        CTOT_SOURCE=CTOT_SOURCE,
        COBT_TYPE=COBT_TYPE,
        CTOT_COMPLIANT=CTOT_COMPLIANT,
        ASBT=ASBT,
        AGCT=AGCT,
        POSITION=POSITION,
        CONTRL_STATUS=CONTRL_STATUS,
        HOBT=HOBT,
        HIT_FLOWCONTROLS=','.format(str(i) for i in HIT_FLOWCONTROLS),
        HIT_FLOWCONTROLS_HIS=','.format(str(i) for i in HIT_FLOWCONTROLS_HIS),
        EXECUTEDATE=EXECUTEDATE
    )
    print(__item)
    return __item
